Skip to content

ops(autopilot): hourly revenue loop — state file + adversarial-panel backlog (T1–T13)#26

Merged
BGMLAI merged 19 commits into
masterfrom
claude/email-cron-strategy-automation-drmkv4
Jul 22, 2026
Merged

ops(autopilot): hourly revenue loop — state file + adversarial-panel backlog (T1–T13)#26
BGMLAI merged 19 commits into
masterfrom
claude/email-cron-strategy-automation-drmkv4

Conversation

@BGMLAI

@BGMLAI BGMLAI commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Bootstraps the autonomous hourly revenue loop for gate.cat (goal: $2,000 USD).

What's in this PR

  • docs/AUTOPILOT-LOOP.md — the loop's single state file:
    • Hard rules: Gmail drafts only (the agent never sends), no cold outreach, every public number must have a FACTS.md row, no spending, no PyPI publish / VPS deploy / social posting (those stay with the owner), never push to master.
    • Goal ledger: $0 / $2,000 confirmed revenue as of 2026-07-22; 2,528 trailing-month PyPI downloads (F13).
    • Queue T1–T13 from a 19-agent multi-model adversarial panel (4 proposal lenses — conversion / distribution / B2B / product-led, run on different models; 3 adversarial judges per proposal; synthesis). Judges verified every load-bearing claim against the repo — notably that the 0.4.17 post-veto nudge links to gate.cat/teams.html, which does not exist in docs/ (live 404) → T1.
    • [USER] list — owner-only actions (send drafts, merge+deploy, PyPI publish, Show HN post).
    • Rejected-ideas register so future panels don't re-propose killed ideas.
    • Thread-dedupe ledger so hourly runs never double-draft a reply.

How the loop runs

An hourly trigger fires into the authoring session: (1) scan Gmail for replies/orders → prepare reply drafts, log payments against the $2k goal; (2) execute the next unblocked queue task; (3) if the queue is empty, run a fresh multi-model adversarial strategy panel to refill it; (4) update this state file, push, keep this PR current.

This PR will accumulate the loop's subsequent work (T1 funnel pages, launch kits under ops/launch/, 0.4.18 release prep) as follow-up commits.

🤖 Generated with Claude Code

https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz


Generated by Claude Code

claude added 19 commits July 22, 2026 13:15
…al-panel backlog T1-T13

Adds docs/AUTOPILOT-LOOP.md: hard rules (drafts-only email, FACTS.md-bounded
claims, no spending/publishing), goal ledger ($0/$2,000), prioritized queue
from a 19-agent multi-model adversarial panel (4 lenses x 3 judges + synthesis),
[USER] action list, rejected-ideas register and thread-dedupe ledger.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
….17 nudge (T1)

The post-veto nudge and README both link gate.cat/teams.html and
gate.cat/partners.html; neither page existed. Adds both as standalone,
no-JS pages in the index.html palette. Every number uses the allowed
wording from FACTS.md (F1b/F2/F3) or PRICING.md; policy sharing is
described as 'rolling out' rather than a dated promise (see T10).
Also: sitemap entries and ops/deploy_landing.sh (rsync without --delete,
sha256 verify, live 200 check, gatecat-fulfill restart) for the owner's
deploy step. Loop state updated in docs/AUTOPILOT-LOOP.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…connector send limitation

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…ions handed to owner

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…respondence in commits

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
Rebuilds the launch-kit Show HN section against FACTS.md: separates the
1M-replay result (F1b, 0 real misses) from the bypass-suite false-block
(F4, 1/129 benign), fixes 69->71 policies (F10) and EUR 9 -> EUR 19,
scopes 'zero dependencies' to the core (pyproject dependencies = []).
Adds an author first-comment with the business model and a conditional
lobste.rs variant. Loop state updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…der install (T5)

pyproject [project.urls]: Homepage now points at https://gate.cat (was the
0-star GitHub repo) and adds a Pricing link to teams.html. README gains a
4-line free-forever/pricing block right under the install section — PyPI
renders README, so the listing finally states the offer. Fixes the stale
'21 deny policies' in the proxy section to the measured 71 default walls
(F10; verified by importing DOGFOOD_DEFAULTS). Landing's EUR 9 founding
price verified as deliberate (guarded by test_marketing_consistency) and
left untouched. Tests: test_marketing_consistency 5 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…eyless-cloud pointer (T6)

Extends the 0.4.17 post-veto nudge instead of reimplementing it:
maybe_nudge_cli() fires on gate.cat status/stats at most once per day
(~/.gatecat/nudge_last), only when interventions > 0 and no
GATECAT_CLOUD_API_KEY, stderr-only, best-effort, honoring
GATECAT_NO_NUDGE/GATECAT_QUIET. A process-wide guard (mark_fired)
guarantees at most one nudge of any kind per run — the pack hint (T7)
will consult the same guard. gate.cat report gains an off-machine-copy
footer link (ASCII-safe, paste-safety test kept green) and gate.cat
cloud without a key now says where to get one. 9 new tests; 49 passed
across the touched suites.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…of-band

The live pages at gate.cat/teams.html and /partners.html (deployed
directly to the VPS by the owner's local session) are richer than the
versions this branch added — OG/twitter cards, dark mode, pricing cards
— and were not committed anywhere. Production wins: this replaces the
branch's versions with exact live copies so the repo matches what is
deployed and a future deploy cannot silently overwrite the live funnel.
Numeric claims on both pages verified against FACTS.md/PRICING.md rows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…elease prep (T7)

gatecat/_pack_hint.py: shutil.which() detection (stripe -> Fintech;
vercel/netlify/fly/heroku/railway/render/supabase -> PaaS), scope quoted
from PRICING.md, once per machine via ~/.gatecat/.pack_nudged, stderr,
best-effort, GATECAT_NO_NUDGE/GATECAT_QUIET honored, and the shared
per-process guard from _nudge.py so no run ever prints two hints.
Wired after the CLI nudge on gate.cat status/stats. 7 new tests.

Release prep: version 0.4.18, CHANGELOG entry (T5+T6+T7), owner-facing
publication checklist in ops/launch/release_0.4.18_checklist.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…ng-consistency test

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…ist PRs, fact-checked (user-approved)

Replaces the stale launch-kit variants (EUR 9, 69 policies, replay/false-
block conflation) with FACTS.md-pinned copy for r/ClaudeAI, r/LocalLLaMA,
r/Python, an 8-tweet X thread and four awesome-list PR descriptions, plus
an anti-spam posting schedule. Owner approved full distribution; HN repost
cleared (old 2026-07-15 post got 2 points). Verified on PyPI: 0.4.18 not
yet published (latest 0.4.17) — release still gated on the checklist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…s discovery-only delta)

gate.cat report already renders the paid-shape monthly report locally
(render_report) and gained its off-machine CTA footer in T6; the only
missing piece of T8 was discovery. The daily CLI hint now names the
command. Tests updated; 35 green across nudge/pack/dashboard suites.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…nd delivered off-repo

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…you page (T9)

The pack download page now offers the two packs NOT just purchased
(scopes quoted from PRICING.md, live Payment Links) plus the Cloud Solo
line. Attribution done properly: client_reference_id=pack-xsell on the
Stripe links (surfaces on the Checkout Session; a bare ?source= query
would be dropped by Payment Links and measure nothing) and
?source=pack-xsell on the teams.html link for nginx analytics. No Stripe
product changes. Two new tests; suite green. Goes live with the next
gatecat-fulfill restart on the VPS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
…ses softened; sync live /answers/ pages (T10)

payment_channel() default flips lemonsqueezy -> stripe, REVERSING the
2026-07-12 founder decision, because Lemon Squeezy declined the account
application on 2026-07-14 — Stripe is the only live channel (merge of
this PR is the sign-off; the LS webhook path stays reachable behind the
env override, tests updated both ways). PRICING.md drops the stale
'LS review is pending' line and softens the dated '(ships this month)'
policy-sharing promise to '(rolling out)', matching the live teams page.
Discovery: the /answers/ pages the sitemap references are LIVE in
production (deployed out-of-band), not dead — synced all 5 into
docs/answers/ instead of deleting the sitemap entries. 23 tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7Q5Rs7ez2YWrjWKAPcHYz
@BGMLAI
BGMLAI marked this pull request as ready for review July 22, 2026 21:53
@BGMLAI
BGMLAI merged commit 8ce3592 into master Jul 22, 2026
3 checks passed
BGMLAI pushed a commit that referenced this pull request Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants